package com.sh.data.engine.domain.authority.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.sh.data.engine.domain.authority.model.domain.UserProjectDomain;
import com.sh.data.engine.domain.authority.model.param.UserProjectSaveParam;
import com.sh.data.engine.domain.base.model.PageResult;
import com.sh.data.engine.domain.management.model.param.BaseQueryParam;
import com.sh.data.engine.domain.workspace.index.model.domain.BaseProjectDomain;
import com.sh.data.engine.domain.workspace.index.model.domain.ProjectDomain;
import com.sh.data.engine.domain.workspace.index.model.domain.ProjectStatisticDomain;
import com.sh.data.engine.domain.workspace.manager.model.domain.StorageDetailDomain;
import com.sh.data.engine.domain.workspace.manager.model.domain.UserDomain;
import com.sh.data.engine.repository.dao.authority.entity.UserProjectEntity;

import java.util.List;

/**
 * @author: mengzheng.mhc
 * @date: 2024/6/25 9:52
 */
public interface UserProjectService extends IService<UserProjectEntity> {

    List<UserProjectDomain> getUserProjectListByRoleId(Integer roleId);

    PageResult<BaseProjectDomain> getProjectList(BaseQueryParam param);

    /**
     * 分页查看当前guid的工作空间列表
     * admin查看所有project
     */
    PageResult<ProjectStatisticDomain> getEnrichedProjectList(BaseQueryParam param);

    /**
     * 查看当前guid加入的工作空间
     *
     * @return
     */
    List<ProjectStatisticDomain> getProjectPrivilege();

    /**
     * 创建工作空间
     * 登录成功的用户都可以创建工作空间，随即成为空间所有者对应roleId=1
     */
    String addProject(UserProjectSaveParam param);

    /**
     * 获取工作空间详情
     */
    ProjectDomain getProject(Long projectId);

    /**
     * 删除工作空间
     * 判断是否有删除权限:空间所有者或者系统管理员admin
     * 判断该空间是否有其他用户关联
     *
     * @param projectId
     */
    String deleteProject(Long projectId);

    /**
     * 根据空间id权限，返回空间名称和id
     * @param projectId
     * @return
     */
    /**
     * 空间管理员（2）或者空间所有者(1)添加用户到指定工作空间
     *
     * @param roleId
     * @return
     */
    int addProjectUser(int roleId, String userName);

    /**
     * 空间管理员（2）或者空间所有者(1)删除空间用户
     *
     * @param userName
     * @return
     */
    int deleteProjectUser(String userName);

    /**
     * 空间管理员（2）或者空间所有者(1)更新空间用户的角色
     *
     * @param userName
     * @param roleId
     * @return
     */
    int updateProjectUser(String userName, int roleId);

    /**
     * 超级管理员（1）空间管理员（3）或者空间所有者(2)根据工作空间ID分页查看用户列表
     * super_admin0 project_owner1 project_admin2
     *
     * @return
     */
    PageResult<UserDomain> getProjectUser(Integer pageNum, Integer pageSize);


    StorageDetailDomain getStorageInfo(Long projectId);

}
